{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from datetime import datetime\n",
    "\n",
    "from vnpy.trader.optimize import OptimizationSetting\n",
    "from vnpy_ctastrategy.backtesting import BacktestingEngine\n",
    "from vnpy_ctastrategy.strategies.atr_rsi_strategy import AtrRsiStrategy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "engine = BacktestingEngine()\n",
    "engine.set_parameters(\n",
    "    vt_symbol=\"IF888.CFFEX\",\n",
    "    interval=\"1m\",\n",
    "    start=datetime(2019, 1, 1),\n",
    "    end=datetime(2019, 4, 30),\n",
    "    rate=0.3/10000,\n",
    "    slippage=0.2,\n",
    "    size=300,\n",
    "    pricetick=0.2,\n",
    "    capital=1_000_000,\n",
    ")\n",
    "engine.add_strategy(AtrRsiStrategy, {})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2025-06-16 20:52:03.097314\t开始加载历史数据\n",
      "2025-06-16 20:52:03.097314\t加载进度：# [0%]\n",
      "2025-06-16 20:52:05.032964\t加载进度：# [9%]\n",
      "2025-06-16 20:52:05.103266\t加载进度：## [18%]\n",
      "2025-06-16 20:52:05.165507\t加载进度：### [28%]\n",
      "2025-06-16 20:52:05.225147\t加载进度：#### [37%]\n",
      "2025-06-16 20:52:05.293374\t加载进度：##### [46%]\n",
      "2025-06-16 20:52:05.428085\t加载进度：###### [55%]\n",
      "2025-06-16 20:52:05.494678\t加载进度：####### [65%]\n",
      "2025-06-16 20:52:05.561114\t加载进度：######## [74%]\n",
      "2025-06-16 20:52:05.621792\t加载进度：######### [83%]\n",
      "2025-06-16 20:52:05.687958\t加载进度：########## [92%]\n",
      "2025-06-16 20:52:05.751452\t历史数据加载完成，数据量：18960\n",
      "2025-06-16 20:52:05.840570\t策略初始化完成\n",
      "2025-06-16 20:52:05.840570\t开始回放历史数据\n",
      "2025-06-16 20:52:05.909744\t回放进度：= [0%]\n",
      "2025-06-16 20:52:05.979275\t回放进度：== [10%]\n",
      "2025-06-16 20:52:06.047814\t回放进度：=== [20%]\n",
      "2025-06-16 20:52:06.123807\t回放进度：==== [30%]\n",
      "2025-06-16 20:52:06.191131\t回放进度：===== [40%]\n",
      "2025-06-16 20:52:06.267813\t回放进度：====== [50%]\n",
      "2025-06-16 20:52:06.337686\t回放进度：======= [60%]\n",
      "2025-06-16 20:52:06.406952\t回放进度：======== [70%]\n",
      "2025-06-16 20:52:06.460610\t回放进度：========= [80%]\n",
      "2025-06-16 20:52:06.512522\t回放进度：========== [90%]\n",
      "2025-06-16 20:52:06.512522\t历史数据回放结束\n",
      "2025-06-16 20:52:06.513522\t开始计算逐日盯市盈亏\n",
      "2025-06-16 20:52:06.532825\t逐日盯市盈亏计算完成\n",
      "2025-06-16 20:52:06.532825\t开始计算策略统计指标\n",
      "2025-06-16 20:52:06.546318\t------------------------------\n",
      "2025-06-16 20:52:06.546318\t首个交易日：\t2019-01-02\n",
      "2025-06-16 20:52:06.546318\t最后交易日：\t2019-04-30\n",
      "2025-06-16 20:52:06.546318\t总交易日：\t79\n",
      "2025-06-16 20:52:06.546318\t盈利交易日：\t39\n",
      "2025-06-16 20:52:06.546318\t亏损交易日：\t40\n",
      "2025-06-16 20:52:06.546318\t起始资金：\t1,000,000.00\n",
      "2025-06-16 20:52:06.546318\t结束资金：\t1,051,703.36\n",
      "2025-06-16 20:52:06.546318\t总收益率：\t5.17%\n",
      "2025-06-16 20:52:06.546318\t年化收益：\t15.71%\n",
      "2025-06-16 20:52:06.546318\t最大回撤: \t-93,714.14\n",
      "2025-06-16 20:52:06.546318\t百分比最大回撤: -8.58%\n",
      "2025-06-16 20:52:06.546318\t最大回撤天数: \t30\n",
      "2025-06-16 20:52:06.546318\t总盈亏：\t51,703.36\n",
      "2025-06-16 20:52:06.546318\t总手续费：\t13,396.64\n",
      "2025-06-16 20:52:06.546318\t总滑点：\t29,940.00\n",
      "2025-06-16 20:52:06.546318\t总成交金额：\t446,554,620.00\n",
      "2025-06-16 20:52:06.546318\t总成交笔数：\t499\n",
      "2025-06-16 20:52:06.546318\t日均盈亏：\t654.47\n",
      "2025-06-16 20:52:06.546318\t日均手续费：\t169.58\n",
      "2025-06-16 20:52:06.546318\t日均滑点：\t378.99\n",
      "2025-06-16 20:52:06.546318\t日均成交金额：\t5,652,590.13\n",
      "2025-06-16 20:52:06.546318\t日均成交笔数：\t6.3164556962025316\n",
      "2025-06-16 20:52:06.546318\t日均收益率：\t0.06%\n",
      "2025-06-16 20:52:06.546318\t收益标准差：\t1.48%\n",
      "2025-06-16 20:52:06.546318\tSharpe Ratio：\t0.67\n",
      "2025-06-16 20:52:06.546318\tEWM Sharpe：\t0.59\n",
      "2025-06-16 20:52:06.546318\t收益回撤比：\t0.60\n",
      "2025-06-16 20:52:06.547317\t策略统计指标计算完成\n"
     ]
    },
    {
     "data": {
      "application/vnd.plotly.v1+json": {
       "config": {
        "plotlyServerURL": "https://plot.ly"
       },
       "data": [
        {
         "mode": "lines",
         "name": "Balance",
         "type": "scatter",
         "x": [
          "2019-01-02",
          "2019-01-03",
          "2019-01-04",
          "2019-01-07",
          "2019-01-08",
          "2019-01-09",
          "2019-01-10",
          "2019-01-11",
          "2019-01-14",
          "2019-01-15",
          "2019-01-16",
          "2019-01-17",
          "2019-01-18",
          "2019-01-21",
          "2019-01-22",
          "2019-01-23",
          "2019-01-24",
          "2019-01-25",
          "2019-01-28",
          "2019-01-29",
          "2019-01-30",
          "2019-01-31",
          "2019-02-01",
          "2019-02-11",
          "2019-02-12",
          "2019-02-13",
          "2019-02-14",
          "2019-02-15",
          "2019-02-18",
          "2019-02-19",
          "2019-02-20",
          "2019-02-21",
          "2019-02-22",
          "2019-02-25",
          "2019-02-26",
          "2019-02-27",
          "2019-02-28",
          "2019-03-01",
          "2019-03-04",
          "2019-03-05",
          "2019-03-06",
          "2019-03-07",
          "2019-03-08",
          "2019-03-11",
          "2019-03-12",
          "2019-03-13",
          "2019-03-14",
          "2019-03-15",
          "2019-03-18",
          "2019-03-19",
          "2019-03-20",
          "2019-03-21",
          "2019-03-22",
          "2019-03-25",
          "2019-03-26",
          "2019-03-27",
          "2019-03-28",
          "2019-03-29",
          "2019-04-01",
          "2019-04-02",
          "2019-04-03",
          "2019-04-04",
          "2019-04-08",
          "2019-04-09",
          "2019-04-10",
          "2019-04-11",
          "2019-04-12",
          "2019-04-15",
          "2019-04-16",
          "2019-04-17",
          "2019-04-18",
          "2019-04-19",
          "2019-04-22",
          "2019-04-23",
          "2019-04-24",
          "2019-04-25",
          "2019-04-26",
          "2019-04-29",
          "2019-04-30"
         ],
         "xaxis": "x",
         "y": [
          1003796.0518000001,
          999389.6998000002,
          995342.0086,
          987113.9818000001,
          982931.4046,
          985261.2214000002,
          982894.7638,
          980064.4888,
          973241.341,
          982738.0059999999,
          974474.0967999999,
          974881.6293999997,
          977988.4744,
          982263.3286,
          994083.3286,
          988654.27,
          979461.151,
          987575.9206,
          990844.6065999998,
          988369.4175999998,
          978093.7443999999,
          974177.3889999999,
          986371.6545999999,
          999631.6545999999,
          1005871.6545999999,
          1028431.6545999999,
          1021853.5348,
          1035424.5046,
          1042826.9643999999,
          1039411.9504000001,
          1014537.7366,
          1032727.369,
          1046988.7642,
          1091942.2336000002,
          1076594.338,
          1071707.0745999997,
          1049716.2484,
          1048904.6535999998,
          1076370.6502,
          1046785.7289999997,
          1044523.3737999998,
          1042688.4844,
          1070256.0507999999,
          1047724.7439999997,
          1076293.8099999996,
          1066599.8031999995,
          1046766.5433999994,
          1047746.3943999994,
          1076671.0227999995,
          1076074.0311999994,
          1079983.9725999993,
          1045206.0249999992,
          1045516.3191999991,
          1019557.6701999994,
          1014587.1717999993,
          998228.0973999992,
          998538.6681999991,
          1033223.6655999991,
          1044866.1279999991,
          1033767.3405999991,
          1048828.113399999,
          1050115.123599999,
          1053080.205399999,
          1058688.835599999,
          1070776.2477999988,
          1065163.7889999987,
          1066574.3469999987,
          1097351.7963999987,
          1108151.2293999987,
          1086126.4419999986,
          1074423.3135999986,
          1103999.6343999985,
          1086686.3163999985,
          1083656.0331999986,
          1085936.5197999985,
          1098536.7867999985,
          1091164.3617999984,
          1078935.5307999987,
          1051703.3613999987
         ],
         "yaxis": "y"
        },
        {
         "fill": "tozeroy",
         "fillcolor": "red",
         "mode": "lines",
         "name": "Drawdown",
         "type": "scatter",
         "x": [
          "2019-01-02",
          "2019-01-03",
          "2019-01-04",
          "2019-01-07",
          "2019-01-08",
          "2019-01-09",
          "2019-01-10",
          "2019-01-11",
          "2019-01-14",
          "2019-01-15",
          "2019-01-16",
          "2019-01-17",
          "2019-01-18",
          "2019-01-21",
          "2019-01-22",
          "2019-01-23",
          "2019-01-24",
          "2019-01-25",
          "2019-01-28",
          "2019-01-29",
          "2019-01-30",
          "2019-01-31",
          "2019-02-01",
          "2019-02-11",
          "2019-02-12",
          "2019-02-13",
          "2019-02-14",
          "2019-02-15",
          "2019-02-18",
          "2019-02-19",
          "2019-02-20",
          "2019-02-21",
          "2019-02-22",
          "2019-02-25",
          "2019-02-26",
          "2019-02-27",
          "2019-02-28",
          "2019-03-01",
          "2019-03-04",
          "2019-03-05",
          "2019-03-06",
          "2019-03-07",
          "2019-03-08",
          "2019-03-11",
          "2019-03-12",
          "2019-03-13",
          "2019-03-14",
          "2019-03-15",
          "2019-03-18",
          "2019-03-19",
          "2019-03-20",
          "2019-03-21",
          "2019-03-22",
          "2019-03-25",
          "2019-03-26",
          "2019-03-27",
          "2019-03-28",
          "2019-03-29",
          "2019-04-01",
          "2019-04-02",
          "2019-04-03",
          "2019-04-04",
          "2019-04-08",
          "2019-04-09",
          "2019-04-10",
          "2019-04-11",
          "2019-04-12",
          "2019-04-15",
          "2019-04-16",
          "2019-04-17",
          "2019-04-18",
          "2019-04-19",
          "2019-04-22",
          "2019-04-23",
          "2019-04-24",
          "2019-04-25",
          "2019-04-26",
          "2019-04-29",
          "2019-04-30"
         ],
         "xaxis": "x2",
         "y": [
          0,
          -4406.351999999955,
          -8454.04320000019,
          -16682.070000000065,
          -20864.647200000123,
          -18534.830399999977,
          -20901.288000000175,
          -23731.563000000082,
          -30554.710800000117,
          -21058.045800000196,
          -29321.95500000019,
          -28914.42240000039,
          -25807.577400000184,
          -21532.723200000124,
          -9712.723200000124,
          -15141.781800000113,
          -24334.900800000178,
          -16220.131200000178,
          -12951.445200000308,
          -15426.63420000032,
          -25702.30740000028,
          -29618.662800000282,
          -17424.39720000024,
          -4164.3972000002395,
          0,
          0,
          -6578.119799999869,
          0,
          0,
          -3415.01399999985,
          -28289.227799999993,
          -10099.595399999991,
          0,
          0,
          -15347.895600000164,
          -20235.15900000045,
          -42225.98520000023,
          -43037.58000000031,
          -15571.58340000012,
          -45156.50460000045,
          -47418.859800000326,
          -49253.749200000195,
          -21686.1828000003,
          -44217.48960000044,
          -15648.423600000562,
          -25342.430400000652,
          -45175.69020000077,
          -44195.839200000744,
          -15271.2108000007,
          -15868.202400000766,
          -11958.261000000872,
          -46736.208600000944,
          -46425.91440000106,
          -72384.5634000008,
          -77355.06180000084,
          -93714.136200001,
          -93403.56540000101,
          -58718.56800000102,
          -47076.10560000106,
          -58174.89300000109,
          -43114.12020000117,
          -41827.11000000127,
          -38862.02820000122,
          -33253.39800000121,
          -21165.985800001305,
          -26778.444600001443,
          -25367.886600001482,
          0,
          0,
          -22024.78740000003,
          -33727.915800000075,
          -4151.595000000205,
          -21464.913000000175,
          -24495.196200000122,
          -22214.709600000177,
          -9614.442600000184,
          -16986.86760000023,
          -29215.698600000003,
          -56447.86800000002
         ],
         "yaxis": "y2"
        },
        {
         "name": "Daily Pnl",
         "type": "bar",
         "xaxis": "x3",
         "y": [
          3796.0518000001366,
          -4406.352,
          -4047.6912000001894,
          -8228.026799999918,
          -4182.577200000027,
          2329.8168000001638,
          -2366.457600000191,
          -2830.2749999999182,
          -6823.147800000082,
          9496.664999999946,
          -8263.9092,
          407.5325999998636,
          3106.8450000001367,
          4274.854200000054,
          11820.000000000027,
          -5429.0586,
          -9193.119,
          8114.769599999972,
          3268.6859999998637,
          -2475.1889999999726,
          -10275.673199999972,
          -3916.355400000027,
          12194.265600000082,
          13259.999999999945,
          6240.000000000055,
          22559.999999999945,
          -6578.1197999999185,
          13570.969800000055,
          7402.45979999992,
          -3415.013999999891,
          -24874.213800000052,
          18189.632399999948,
          14261.395200000059,
          44953.46940000012,
          -15347.895600000224,
          -4887.263400000187,
          -21990.826199999894,
          -811.59479999992,
          27465.99660000008,
          -29584.921200000324,
          -2262.3551999998344,
          -1834.8893999998636,
          27567.566399999778,
          -22531.30680000008,
          28569.06599999989,
          -9694.006800000026,
          -19833.259800000087,
          979.850999999971,
          28924.6284,
          -596.9916000000273,
          3909.941399999918,
          -34777.94760000006,
          310.2941999999182,
          -25958.648999999838,
          -4970.498400000024,
          -16359.074400000081,
          310.5707999999454,
          34684.99739999994,
          11642.462399999975,
          -11098.787400000054,
          15060.77279999992,
          1287.0102,
          2965.0818,
          5608.630199999972,
          12087.412199999919,
          -5612.4588,
          1410.5579999999727,
          30777.449399999892,
          10799.433000000066,
          -22024.78740000014,
          -11703.128400000081,
          29576.320800000027,
          -17313.318000000058,
          -3030.2832,
          2280.4866,
          12600.26699999997,
          -7372.42500000008,
          -12228.830999999807,
          -27232.169400000028
         ],
         "yaxis": "y3"
        },
        {
         "name": "Days",
         "nbinsx": 100,
         "type": "histogram",
         "x": [
          3796.0518000001366,
          -4406.352,
          -4047.6912000001894,
          -8228.026799999918,
          -4182.577200000027,
          2329.8168000001638,
          -2366.457600000191,
          -2830.2749999999182,
          -6823.147800000082,
          9496.664999999946,
          -8263.9092,
          407.5325999998636,
          3106.8450000001367,
          4274.854200000054,
          11820.000000000027,
          -5429.0586,
          -9193.119,
          8114.769599999972,
          3268.6859999998637,
          -2475.1889999999726,
          -10275.673199999972,
          -3916.355400000027,
          12194.265600000082,
          13259.999999999945,
          6240.000000000055,
          22559.999999999945,
          -6578.1197999999185,
          13570.969800000055,
          7402.45979999992,
          -3415.013999999891,
          -24874.213800000052,
          18189.632399999948,
          14261.395200000059,
          44953.46940000012,
          -15347.895600000224,
          -4887.263400000187,
          -21990.826199999894,
          -811.59479999992,
          27465.99660000008,
          -29584.921200000324,
          -2262.3551999998344,
          -1834.8893999998636,
          27567.566399999778,
          -22531.30680000008,
          28569.06599999989,
          -9694.006800000026,
          -19833.259800000087,
          979.850999999971,
          28924.6284,
          -596.9916000000273,
          3909.941399999918,
          -34777.94760000006,
          310.2941999999182,
          -25958.648999999838,
          -4970.498400000024,
          -16359.074400000081,
          310.5707999999454,
          34684.99739999994,
          11642.462399999975,
          -11098.787400000054,
          15060.77279999992,
          1287.0102,
          2965.0818,
          5608.630199999972,
          12087.412199999919,
          -5612.4588,
          1410.5579999999727,
          30777.449399999892,
          10799.433000000066,
          -22024.78740000014,
          -11703.128400000081,
          29576.320800000027,
          -17313.318000000058,
          -3030.2832,
          2280.4866,
          12600.26699999997,
          -7372.42500000008,
          -12228.830999999807,
          -27232.169400000028
         ],
         "xaxis": "x4",
         "yaxis": "y4"
        }
       ],
       "layout": {
        "annotations": [
         {
          "font": {
           "size": 16
          },
          "showarrow": false,
          "text": "Balance",
          "x": 0.5,
          "xanchor": "center",
          "xref": "paper",
          "y": 1,
          "yanchor": "bottom",
          "yref": "paper"
         },
         {
          "font": {
           "size": 16
          },
          "showarrow": false,
          "text": "Drawdown",
          "x": 0.5,
          "xanchor": "center",
          "xref": "paper",
          "y": 0.7350000000000001,
          "yanchor": "bottom",
          "yref": "paper"
         },
         {
          "font": {
           "size": 16
          },
          "showarrow": false,
          "text": "Daily Pnl",
          "x": 0.5,
          "xanchor": "center",
          "xref": "paper",
          "y": 0.47000000000000003,
          "yanchor": "bottom",
          "yref": "paper"
         },
         {
          "font": {
           "size": 16
          },
          "showarrow": false,
          "text": "Pnl Distribution",
          "x": 0.5,
          "xanchor": "center",
          "xref": "paper",
          "y": 0.20500000000000002,
          "yanchor": "bottom",
          "yref": "paper"
         }
        ],
        "height": 1000,
        "template": {
         "data": {
          "bar": [
           {
            "error_x": {
             "color": "#2a3f5f"
            },
            "error_y": {
             "color": "#2a3f5f"
            },
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             },
             "pattern": {
              "fillmode": "overlay",
              "size": 10,
              "solidity": 0.2
             }
            },
            "type": "bar"
           }
          ],
          "barpolar": [
           {
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             },
             "pattern": {
              "fillmode": "overlay",
              "size": 10,
              "solidity": 0.2
             }
            },
            "type": "barpolar"
           }
          ],
          "carpet": [
           {
            "aaxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "baxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "type": "carpet"
           }
          ],
          "choropleth": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "choropleth"
           }
          ],
          "contour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "contour"
           }
          ],
          "contourcarpet": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "contourcarpet"
           }
          ],
          "heatmap": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmap"
           }
          ],
          "heatmapgl": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmapgl"
           }
          ],
          "histogram": [
           {
            "marker": {
             "pattern": {
              "fillmode": "overlay",
              "size": 10,
              "solidity": 0.2
             }
            },
            "type": "histogram"
           }
          ],
          "histogram2d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2d"
           }
          ],
          "histogram2dcontour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2dcontour"
           }
          ],
          "mesh3d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "mesh3d"
           }
          ],
          "parcoords": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "parcoords"
           }
          ],
          "pie": [
           {
            "automargin": true,
            "type": "pie"
           }
          ],
          "scatter": [
           {
            "fillpattern": {
             "fillmode": "overlay",
             "size": 10,
             "solidity": 0.2
            },
            "type": "scatter"
           }
          ],
          "scatter3d": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter3d"
           }
          ],
          "scattercarpet": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattercarpet"
           }
          ],
          "scattergeo": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergeo"
           }
          ],
          "scattergl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergl"
           }
          ],
          "scattermapbox": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattermapbox"
           }
          ],
          "scatterpolar": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolar"
           }
          ],
          "scatterpolargl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolargl"
           }
          ],
          "scatterternary": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterternary"
           }
          ],
          "surface": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "surface"
           }
          ],
          "table": [
           {
            "cells": {
             "fill": {
              "color": "#EBF0F8"
             },
             "line": {
              "color": "white"
             }
            },
            "header": {
             "fill": {
              "color": "#C8D4E3"
             },
             "line": {
              "color": "white"
             }
            },
            "type": "table"
           }
          ]
         },
         "layout": {
          "annotationdefaults": {
           "arrowcolor": "#2a3f5f",
           "arrowhead": 0,
           "arrowwidth": 1
          },
          "autotypenumbers": "strict",
          "coloraxis": {
           "colorbar": {
            "outlinewidth": 0,
            "ticks": ""
           }
          },
          "colorscale": {
           "diverging": [
            [
             0,
             "#8e0152"
            ],
            [
             0.1,
             "#c51b7d"
            ],
            [
             0.2,
             "#de77ae"
            ],
            [
             0.3,
             "#f1b6da"
            ],
            [
             0.4,
             "#fde0ef"
            ],
            [
             0.5,
             "#f7f7f7"
            ],
            [
             0.6,
             "#e6f5d0"
            ],
            [
             0.7,
             "#b8e186"
            ],
            [
             0.8,
             "#7fbc41"
            ],
            [
             0.9,
             "#4d9221"
            ],
            [
             1,
             "#276419"
            ]
           ],
           "sequential": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ],
           "sequentialminus": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ]
          },
          "colorway": [
           "#636efa",
           "#EF553B",
           "#00cc96",
           "#ab63fa",
           "#FFA15A",
           "#19d3f3",
           "#FF6692",
           "#B6E880",
           "#FF97FF",
           "#FECB52"
          ],
          "font": {
           "color": "#2a3f5f"
          },
          "geo": {
           "bgcolor": "white",
           "lakecolor": "white",
           "landcolor": "#E5ECF6",
           "showlakes": true,
           "showland": true,
           "subunitcolor": "white"
          },
          "hoverlabel": {
           "align": "left"
          },
          "hovermode": "closest",
          "mapbox": {
           "style": "light"
          },
          "paper_bgcolor": "white",
          "plot_bgcolor": "#E5ECF6",
          "polar": {
           "angularaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "radialaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "scene": {
           "xaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "yaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "zaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           }
          },
          "shapedefaults": {
           "line": {
            "color": "#2a3f5f"
           }
          },
          "ternary": {
           "aaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "baxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "caxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "title": {
           "x": 0.05
          },
          "xaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          },
          "yaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          }
         }
        },
        "width": 1000,
        "xaxis": {
         "anchor": "y",
         "domain": [
          0,
          1
         ]
        },
        "xaxis2": {
         "anchor": "y2",
         "domain": [
          0,
          1
         ]
        },
        "xaxis3": {
         "anchor": "y3",
         "domain": [
          0,
          1
         ]
        },
        "xaxis4": {
         "anchor": "y4",
         "domain": [
          0,
          1
         ]
        },
        "yaxis": {
         "anchor": "x",
         "domain": [
          0.7949999999999999,
          1
         ]
        },
        "yaxis2": {
         "anchor": "x2",
         "domain": [
          0.53,
          0.7350000000000001
         ]
        },
        "yaxis3": {
         "anchor": "x3",
         "domain": [
          0.265,
          0.47000000000000003
         ]
        },
        "yaxis4": {
         "anchor": "x4",
         "domain": [
          0,
          0.20500000000000002
         ]
        }
       }
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "engine.load_data()\n",
    "engine.run_backtesting()\n",
    "df = engine.calculate_result()\n",
    "engine.calculate_statistics()\n",
    "engine.show_chart()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2025-06-16 20:52:12.736299\t开始执行遗传算法优化\n",
      "2025-06-16 20:52:12.737296\t参数优化空间：9\n",
      "2025-06-16 20:52:12.737296\t每代族群总数：100\n",
      "2025-06-16 20:52:12.737296\t优良筛选个数：80\n",
      "2025-06-16 20:52:12.737296\t迭代次数：30\n",
      "2025-06-16 20:52:12.737296\t交叉概率：95%\n",
      "2025-06-16 20:52:12.737296\t突变概率：5%\n",
      "2025-06-16 20:52:12.737296\t个体突变概率：100%\n",
      "gen\tnevals\n",
      "0  \t100   \n",
      "1  \t100   \n",
      "2  \t100   \n",
      "3  \t100   \n",
      "4  \t100   \n",
      "5  \t100   \n",
      "6  \t100   \n",
      "7  \t100   \n",
      "8  \t100   \n",
      "9  \t100   \n",
      "10 \t100   \n",
      "11 \t100   \n",
      "12 \t100   \n",
      "13 \t100   \n",
      "14 \t100   \n",
      "15 \t100   \n",
      "16 \t100   \n",
      "17 \t100   \n",
      "18 \t100   \n",
      "19 \t100   \n",
      "20 \t100   \n",
      "21 \t100   \n",
      "22 \t100   \n",
      "23 \t100   \n",
      "24 \t100   \n",
      "25 \t100   \n",
      "26 \t100   \n",
      "27 \t100   \n",
      "28 \t100   \n",
      "29 \t100   \n",
      "30 \t100   \n",
      "2025-06-16 20:52:26.338670\t遗传算法优化完成，耗时13秒\n",
      "2025-06-16 20:52:26.462433\t参数：{'atr_length': 25, 'atr_ma_length': 20}, 目标：2.0127186461733073\n",
      "2025-06-16 20:52:26.463435\t参数：{'atr_length': 27, 'atr_ma_length': 20}, 目标：1.972733364131168\n",
      "2025-06-16 20:52:26.463435\t参数：{'atr_length': 26, 'atr_ma_length': 20}, 目标：1.927735865279324\n",
      "2025-06-16 20:52:26.463435\t参数：{'atr_length': 27, 'atr_ma_length': 30}, 目标：1.273993651024933\n",
      "2025-06-16 20:52:26.463435\t参数：{'atr_length': 25, 'atr_ma_length': 30}, 目标：1.220296323588909\n",
      "2025-06-16 20:52:26.463435\t参数：{'atr_length': 26, 'atr_ma_length': 30}, 目标：1.100003635114256\n",
      "2025-06-16 20:52:26.463435\t参数：{'atr_length': 27, 'atr_ma_length': 10}, 目标：0.7261753437654116\n",
      "2025-06-16 20:52:26.463435\t参数：{'atr_length': 26, 'atr_ma_length': 10}, 目标：0.5706887229122534\n",
      "2025-06-16 20:52:26.463435\t参数：{'atr_length': 25, 'atr_ma_length': 10}, 目标：0.46478426808123563\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[({'atr_length': 25, 'atr_ma_length': 20},\n",
       "  2.0127186461733073,\n",
       "  {'start_date': datetime.date(2019, 1, 2),\n",
       "   'end_date': datetime.date(2019, 4, 30),\n",
       "   'total_days': 79,\n",
       "   'profit_days': 38,\n",
       "   'loss_days': 41,\n",
       "   'capital': 1000000,\n",
       "   'end_balance': 1157730.3249999983,\n",
       "   'max_drawdown': -56901.58860000118,\n",
       "   'max_ddpercent': -5.230378359138127,\n",
       "   'max_drawdown_duration': 31,\n",
       "   'total_net_pnl': 157730.32499999838,\n",
       "   'daily_net_pnl': 1996.5863924050427,\n",
       "   'total_commission': 12249.674999999997,\n",
       "   'daily_commission': 155.05917721518983,\n",
       "   'total_slippage': 27540.0,\n",
       "   'daily_slippage': 348.60759493670884,\n",
       "   'total_turnover': 408322500.0,\n",
       "   'daily_turnover': 5168639.24050633,\n",
       "   'total_trade_count': 459,\n",
       "   'daily_trade_count': 5.810126582278481,\n",
       "   'total_return': 15.77303249999984,\n",
       "   'annual_return': 47.91807341772103,\n",
       "   'daily_return': 0.1853942684361968,\n",
       "   'return_std': 1.4269831811830316,\n",
       "   'sharpe_ratio': 2.0127186461733073,\n",
       "   'ewm_sharpe': 2.0847989170594987,\n",
       "   'return_drawdown_ratio': 3.015658030253657}),\n",
       " ({'atr_length': 27, 'atr_ma_length': 20},\n",
       "  1.972733364131168,\n",
       "  {'start_date': datetime.date(2019, 1, 2),\n",
       "   'end_date': datetime.date(2019, 4, 30),\n",
       "   'total_days': 79,\n",
       "   'profit_days': 40,\n",
       "   'loss_days': 39,\n",
       "   'capital': 1000000,\n",
       "   'end_balance': 1152267.1455999983,\n",
       "   'max_drawdown': -49582.891800000914,\n",
       "   'max_ddpercent': -4.569238197913546,\n",
       "   'max_drawdown_duration': 31,\n",
       "   'total_net_pnl': 152267.1455999984,\n",
       "   'daily_net_pnl': 1927.4322227847897,\n",
       "   'total_commission': 12372.854399999998,\n",
       "   'daily_commission': 156.61841012658226,\n",
       "   'total_slippage': 27780.0,\n",
       "   'daily_slippage': 351.6455696202532,\n",
       "   'total_turnover': 412428480.0,\n",
       "   'daily_turnover': 5220613.670886076,\n",
       "   'total_trade_count': 463,\n",
       "   'daily_trade_count': 5.860759493670886,\n",
       "   'total_return': 15.22671455999982,\n",
       "   'annual_return': 46.258373346834894,\n",
       "   'daily_return': 0.17940687672394376,\n",
       "   'return_std': 1.4088875027526955,\n",
       "   'sharpe_ratio': 1.972733364131168,\n",
       "   'ewm_sharpe': 2.026542024055209,\n",
       "   'return_drawdown_ratio': 3.332440529572917}),\n",
       " ({'atr_length': 26, 'atr_ma_length': 20},\n",
       "  1.927735865279324,\n",
       "  {'start_date': datetime.date(2019, 1, 2),\n",
       "   'end_date': datetime.date(2019, 4, 30),\n",
       "   'total_days': 79,\n",
       "   'profit_days': 39,\n",
       "   'loss_days': 40,\n",
       "   'capital': 1000000,\n",
       "   'end_balance': 1147643.3271999985,\n",
       "   'max_drawdown': -50666.8596000009,\n",
       "   'max_ddpercent': -4.666033619086949,\n",
       "   'max_drawdown_duration': 31,\n",
       "   'total_net_pnl': 147643.32719999852,\n",
       "   'daily_net_pnl': 1868.9028759493483,\n",
       "   'total_commission': 12316.672799999998,\n",
       "   'daily_commission': 155.90725063291137,\n",
       "   'total_slippage': 27660.0,\n",
       "   'daily_slippage': 350.126582278481,\n",
       "   'total_turnover': 410555760.0,\n",
       "   'daily_turnover': 5196908.354430379,\n",
       "   'total_trade_count': 461,\n",
       "   'daily_trade_count': 5.8354430379746836,\n",
       "   'total_return': 14.764332719999862,\n",
       "   'annual_return': 44.85366902278439,\n",
       "   'daily_return': 0.17431716333002323,\n",
       "   'return_std': 1.4008713178918295,\n",
       "   'sharpe_ratio': 1.927735865279324,\n",
       "   'ewm_sharpe': 1.9723836768576808,\n",
       "   'return_drawdown_ratio': 3.164214818256914}),\n",
       " ({'atr_length': 27, 'atr_ma_length': 30},\n",
       "  1.273993651024933,\n",
       "  {'start_date': datetime.date(2019, 1, 2),\n",
       "   'end_date': datetime.date(2019, 4, 30),\n",
       "   'total_days': 79,\n",
       "   'profit_days': 38,\n",
       "   'loss_days': 41,\n",
       "   'capital': 1000000,\n",
       "   'end_balance': 1094503.6569999983,\n",
       "   'max_drawdown': -77433.63960000011,\n",
       "   'max_ddpercent': -6.607319335654653,\n",
       "   'max_drawdown_duration': 11,\n",
       "   'total_net_pnl': 94503.65699999814,\n",
       "   'daily_net_pnl': 1196.2488227847866,\n",
       "   'total_commission': 12356.342999999999,\n",
       "   'daily_commission': 156.40940506329113,\n",
       "   'total_slippage': 27660.0,\n",
       "   'daily_slippage': 350.126582278481,\n",
       "   'total_turnover': 411878100.0,\n",
       "   'daily_turnover': 5213646.835443038,\n",
       "   'total_trade_count': 461,\n",
       "   'daily_trade_count': 5.8354430379746836,\n",
       "   'total_return': 9.450365699999818,\n",
       "   'annual_return': 28.70997174683489,\n",
       "   'daily_return': 0.11430503699608949,\n",
       "   'return_std': 1.3899645553722253,\n",
       "   'sharpe_ratio': 1.273993651024933,\n",
       "   'ewm_sharpe': 1.1696997763268426,\n",
       "   'return_drawdown_ratio': 1.4302874161088925}),\n",
       " ({'atr_length': 25, 'atr_ma_length': 30},\n",
       "  1.220296323588909,\n",
       "  {'start_date': datetime.date(2019, 1, 2),\n",
       "   'end_date': datetime.date(2019, 4, 30),\n",
       "   'total_days': 79,\n",
       "   'profit_days': 36,\n",
       "   'loss_days': 43,\n",
       "   'capital': 1000000,\n",
       "   'end_balance': 1094928.4857999983,\n",
       "   'max_drawdown': -76113.6000000001,\n",
       "   'max_ddpercent': -6.499646846424227,\n",
       "   'max_drawdown_duration': 11,\n",
       "   'total_net_pnl': 94928.48579999819,\n",
       "   'daily_net_pnl': 1201.6264025316227,\n",
       "   'total_commission': 12291.5142,\n",
       "   'daily_commission': 155.58878734177216,\n",
       "   'total_slippage': 27540.0,\n",
       "   'daily_slippage': 348.60759493670884,\n",
       "   'total_turnover': 409717140.0,\n",
       "   'daily_turnover': 5186292.911392405,\n",
       "   'total_trade_count': 459,\n",
       "   'daily_trade_count': 5.810126582278481,\n",
       "   'total_return': 9.492848579999835,\n",
       "   'annual_return': 28.839033660758993,\n",
       "   'daily_return': 0.11479626754936274,\n",
       "   'return_std': 1.4573641625596836,\n",
       "   'sharpe_ratio': 1.220296323588909,\n",
       "   'ewm_sharpe': 1.153717453838036,\n",
       "   'return_drawdown_ratio': 1.4605175949247635}),\n",
       " ({'atr_length': 26, 'atr_ma_length': 30},\n",
       "  1.100003635114256,\n",
       "  {'start_date': datetime.date(2019, 1, 2),\n",
       "   'end_date': datetime.date(2019, 4, 30),\n",
       "   'total_days': 79,\n",
       "   'profit_days': 37,\n",
       "   'loss_days': 42,\n",
       "   'capital': 1000000,\n",
       "   'end_balance': 1082878.4175999982,\n",
       "   'max_drawdown': -76113.6000000001,\n",
       "   'max_ddpercent': -6.567223832793394,\n",
       "   'max_drawdown_duration': 11,\n",
       "   'total_net_pnl': 82878.4175999981,\n",
       "   'daily_net_pnl': 1049.093893670862,\n",
       "   'total_commission': 12401.5824,\n",
       "   'daily_commission': 156.98205569620254,\n",
       "   'total_slippage': 27780.0,\n",
       "   'daily_slippage': 351.6455696202532,\n",
       "   'total_turnover': 413386080.0,\n",
       "   'daily_turnover': 5232735.189873418,\n",
       "   'total_trade_count': 463,\n",
       "   'daily_trade_count': 5.860759493670886,\n",
       "   'total_return': 8.287841759999814,\n",
       "   'annual_return': 25.1782534481007,\n",
       "   'daily_return': 0.10078822438750101,\n",
       "   'return_std': 1.4194539075539052,\n",
       "   'sharpe_ratio': 1.100003635114256,\n",
       "   'ewm_sharpe': 1.025155295553051,\n",
       "   'return_drawdown_ratio': 1.2620008044517266}),\n",
       " ({'atr_length': 27, 'atr_ma_length': 10},\n",
       "  0.7261753437654116,\n",
       "  {'start_date': datetime.date(2019, 1, 2),\n",
       "   'end_date': datetime.date(2019, 4, 30),\n",
       "   'total_days': 79,\n",
       "   'profit_days': 39,\n",
       "   'loss_days': 40,\n",
       "   'capital': 1000000,\n",
       "   'end_balance': 1057831.2345999987,\n",
       "   'max_drawdown': -90713.4234000009,\n",
       "   'max_ddpercent': -8.259369529539693,\n",
       "   'max_drawdown_duration': 30,\n",
       "   'total_net_pnl': 57831.23459999873,\n",
       "   'daily_net_pnl': 732.0409443037814,\n",
       "   'total_commission': 13388.765399999998,\n",
       "   'daily_commission': 169.47804303797466,\n",
       "   'total_slippage': 29940.0,\n",
       "   'daily_slippage': 378.9873417721519,\n",
       "   'total_turnover': 446292180.0,\n",
       "   'daily_turnover': 5649268.101265823,\n",
       "   'total_trade_count': 499,\n",
       "   'daily_trade_count': 6.3164556962025316,\n",
       "   'total_return': 5.783123459999873,\n",
       "   'annual_return': 17.56898266329075,\n",
       "   'daily_return': 0.07116557860996443,\n",
       "   'return_std': 1.5182178967984687,\n",
       "   'sharpe_ratio': 0.7261753437654116,\n",
       "   'ewm_sharpe': 0.6534432099800027,\n",
       "   'return_drawdown_ratio': 0.7001894562673932}),\n",
       " ({'atr_length': 26, 'atr_ma_length': 10},\n",
       "  0.5706887229122534,\n",
       "  {'start_date': datetime.date(2019, 1, 2),\n",
       "   'end_date': datetime.date(2019, 4, 30),\n",
       "   'total_days': 79,\n",
       "   'profit_days': 39,\n",
       "   'loss_days': 40,\n",
       "   'capital': 1000000,\n",
       "   'end_balance': 1045896.9177999987,\n",
       "   'max_drawdown': -102407.73300000094,\n",
       "   'max_ddpercent': -9.32616310918827,\n",
       "   'max_drawdown_duration': 30,\n",
       "   'total_net_pnl': 45896.91779999864,\n",
       "   'daily_net_pnl': 580.9736430379575,\n",
       "   'total_commission': 13443.082199999999,\n",
       "   'daily_commission': 170.1655974683544,\n",
       "   'total_slippage': 30060.0,\n",
       "   'daily_slippage': 380.50632911392404,\n",
       "   'total_turnover': 448102740.0,\n",
       "   'daily_turnover': 5672186.582278481,\n",
       "   'total_trade_count': 501,\n",
       "   'daily_trade_count': 6.341772151898734,\n",
       "   'total_return': 4.58969177999986,\n",
       "   'annual_return': 13.943367432910968,\n",
       "   'daily_return': 0.05680355928871988,\n",
       "   'return_std': 1.5419911436683065,\n",
       "   'sharpe_ratio': 0.5706887229122534,\n",
       "   'ewm_sharpe': 0.504537957914293,\n",
       "   'return_drawdown_ratio': 0.49213076441672243}),\n",
       " ({'atr_length': 25, 'atr_ma_length': 10},\n",
       "  0.46478426808123563,\n",
       "  {'start_date': datetime.date(2019, 1, 2),\n",
       "   'end_date': datetime.date(2019, 4, 30),\n",
       "   'total_days': 79,\n",
       "   'profit_days': 39,\n",
       "   'loss_days': 40,\n",
       "   'capital': 1000000,\n",
       "   'end_balance': 1037256.6585999986,\n",
       "   'max_drawdown': -110927.99580000085,\n",
       "   'max_ddpercent': -10.103198434300957,\n",
       "   'max_drawdown_duration': 30,\n",
       "   'total_net_pnl': 37256.65859999858,\n",
       "   'daily_net_pnl': 471.6032734177035,\n",
       "   'total_commission': 13443.341399999998,\n",
       "   'daily_commission': 170.16887848101263,\n",
       "   'total_slippage': 30060.0,\n",
       "   'daily_slippage': 380.50632911392404,\n",
       "   'total_turnover': 448111380.0,\n",
       "   'daily_turnover': 5672295.949367088,\n",
       "   'total_trade_count': 501,\n",
       "   'daily_trade_count': 6.341772151898734,\n",
       "   'total_return': 3.7256658599998493,\n",
       "   'annual_return': 11.31847856202486,\n",
       "   'daily_return': 0.046303037575705135,\n",
       "   'return_std': 1.5433473611303774,\n",
       "   'sharpe_ratio': 0.46478426808123563,\n",
       "   'ewm_sharpe': 0.39342110236894756,\n",
       "   'return_drawdown_ratio': 0.36876102990821136})]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "setting = OptimizationSetting()\n",
    "setting.set_target(\"sharpe_ratio\")\n",
    "setting.add_parameter(\"atr_length\", 25, 27, 1)\n",
    "setting.add_parameter(\"atr_ma_length\", 10, 30, 10)\n",
    "\n",
    "engine.run_ga_optimization(setting)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "engine.run_bf_optimization(setting)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
